import os
import subprocess
import sys

def build_exe():
    """使用PyInstaller打包程序为exe文件"""
    
    print("开始打包DBF转Excel工具...")
    
    # PyInstaller命令
    cmd = [
        "pyinstaller",
        "--onefile",                    # 打包成单个exe文件
        "--windowed",                   # 不显示控制台窗口
        "--name=DBF转Excel工具",        # 设置exe文件名
        "--icon=icon.ico",              # 设置图标（如果存在）
        "--add-data=icon.ico;.",        # 添加图标文件（如果存在）
        "--hidden-import=dbfread",      # 确保包含dbfread模块
        "--hidden-import=pandas",       # 确保包含pandas模块
        "--hidden-import=openpyxl",     # 确保包含openpyxl模块
        "--hidden-import=tkinter",      # 确保包含tkinter模块
        "--clean",                      # 清理临时文件
        "app.py"     # 主程序文件
    ]
    
    # 如果图标文件不存在，移除相关参数
    if not os.path.exists("icon.ico"):
        cmd = [arg for arg in cmd if "icon.ico" not in arg]
        print("注意: 未找到icon.ico文件，将使用默认图标")
    
    try:
        # 执行打包命令
        result = subprocess.run(cmd, check=True, capture_output=True, text=True)
        print("打包成功！")
        print("exe文件位置: dist/DBF转Excel工具.exe")
        
        # 显示输出信息
        if result.stdout:
            print("输出信息:")
            print(result.stdout)
            
    except subprocess.CalledProcessError as e:
        print(f"打包失败: {e}")
        if e.stderr:
            print("错误信息:")
            print(e.stderr)
        return False
    except FileNotFoundError:
        print("错误: 未找到PyInstaller，请先安装: pip install pyinstaller")
        return False
    
    return True

def install_dependencies():
    """安装必要的依赖包"""
    print("检查并安装依赖包...")
    
    dependencies = [
        "dbfread==2.0.7",
        "openpyxl==3.1.2",
        "pandas==2.1.4",
        "pyinstaller==6.3.0"
    ]
    
    for dep in dependencies:
        try:
            print(f"安装 {dep}...")
            subprocess.run([sys.executable, "-m", "pip", "install", dep], check=True)
            print(f"{dep} 安装成功")
        except subprocess.CalledProcessError as e:
            print(f"安装 {dep} 失败: {e}")
            return False
    
    return True

if __name__ == "__main__":
    print("DBF转Excel工具 - 打包脚本")
    print("=" * 50)
    
    # 检查是否安装了依赖
    try:
        import dbfread
        import pandas
        import openpyxl
        print("依赖包检查通过")
    except ImportError:
        print("缺少必要的依赖包，正在安装...")
        if not install_dependencies():
            print("依赖包安装失败，请手动安装")
            sys.exit(1)
    
    # 开始打包
    if build_exe():
        print("\n打包完成！")
        print("您可以在 dist/ 目录下找到 'DBF转Excel工具.exe' 文件")
        print("该文件可以直接在Windows系统上运行，无需安装Python环境")
    else:
        print("\n打包失败，请检查错误信息")
        sys.exit(1) 